<?php

/**
* alltosun.com 积分记录方法 score_record.php
* ============================================================================
* 版权所有 (C) 2009-2014 北京互动阳光科技有限公司，并保留所有权利。
* 网站地址: http://www.alltosun.com
* ----------------------------------------------------------------------------
* 许可声明: 这是一个开源程序，未经许可不得将本软件的整体或任何部分用于商业用途及再发布。
* ============================================================================
* $Author: 高昂 (gaoa@alltosun.com) $
* $Date: 2014-8-8 下午12:36:18 $
* $Id: score_record_helper.php 160854 2016-01-09 05:42:36Z wangdk $
*/

class score_record_helper
{
    /**
     * 格式化积分列表
     * @param unknown_type $data
     */
    public static function score_record_format($data)
    {
        $score_record_list = array();
                
        if ($data) {
            foreach ($data as $k => $record) {
                if (!isset($record['user_id'])) {
                	continue;
                }
                $score_record_list[$k]['user_id']   = $record['user_id'];
                $score_record_list[$k]['add_time']  = $record['add_time'];
                $score_record_list[$k]['score']     = round($record['score']);

                // 减积分
                $score_record_list[$k]['minus'] = $record['score'] < 0 ? 1 :0;

                // 积分类型
                $type_info = _uri('score_type', $record['res_id']);
                if ($type_info && $type_info['status'] == 1) {
                    $score_record_list[$k]['res_name'] = $type_info['res_name'];
                } else {
                    $score_record_list[$k]['res_name'] = '其他途径';
                }

                $score_record_list[$k]['content'] = '';

                // 获取积分类型 1:后台添加,2;进货 3,发货 4,违规 5,用户初始添加积分 6,核销
                switch ($record['res_id']) {

                    // 1:后台添加
                    case 1:
                        $score_record_list[$k]['content'] = $type_info['res_name'];
                        break;

                        // 2;进货 3,发货
                    case 2:
                        $order_info = order_helper::get_order_detail($record['order_id']);
                        if ($order_info) {
                            $score_record_list[$k]['content'] = '订单编号: '.$order_info['order_no'];
                        }
                        break;
                    case 3:
                        $order_info = order_helper::get_order_detail($record['order_id']);
                        if ($order_info) {
                            $score_record_list[$k]['content'] = '完成'.$order_info['goods_num'].'箱发货';
                        }
                        break;
                    case 5:
                        // 用户初始添加积分
                        $score_record_info = _model('score_record')->read(array('user_id'=>$record['user_id'], 'res_id'=>5));
                        $score_record_list[$k]['res_name'] = '用户初始添加'.$score_record_info['score'].'积分';
                        break;
                    case 4:
                        //违规(没有积分子类型,只是违规)
                        break;
                    case 6:
                        // 核销
                        $vocher_record_info = _model('store_verify_vocher_record')->read(array('user_id'=>$record['user_id'], 'add_time'=>$record['add_time']));
                        if ($vocher_record_info) {
                        	$score_record_list[$k]['content'] = '优惠码: '.$vocher_record_info['discount_code'];
                        }
                        break;
                    default:
                        //此处判断违规(有子类型)
                        //通过res_id获取父级id
                        $score_type_info = _model('score_type')->read(array('parent_id'=>4, 'id'=>$record['res_id']));
                        if ($score_type_info) {
                        	$score_record_list[$k]['content'] = $score_type_info['res_name'];
                        }
                        break;
                }
            }
            return $score_record_list;
        }
        return false;
    }

    /**
     * 根据总积分数获取积分等级
     * 等级规则如下:
     * 0     -  1000  --- 一级
     * 1000  -  3000  --- 二级
     * 3000  -  7000  --- 三级
     * 7000  -  15000 --- 四级
     * 15000 -  31000 --- 五级
     * 31000 -  63000 --- 六级
     * @param $score 积分数 int
     * @return $level 等级 int
     */
    public static function get_user_score_level($score)
    {
        if ($score >= 31000) {
        	return 6;
        } elseif ($score >= 15000) {
            return 5;
        } elseif ($score >= 7000) {
            return 4;
        } elseif ($score >= 3000) {
            return 3;
        } elseif ($score >= 1000) {
            return 2;
        } else {
            return 1;
        }
    }

    /**
     * 获取积分数距离下一等级所差积分
     */
    public static function score_left($score)
    {
        if (!is_numeric($score)) {
        	return  false;
        }

        // 根据积分数获取等级
        $level = Self::get_user_score_level($score);
        //因为当前积分等级只有6级所以做一个越界判断
        if ($level >= 6) {
            return 0;
        } else {
            $level++;
        }

        //计算达到此等级所需要的积分数
        $target_score = Self::level_to_score($level);

        return $target_score-$score;

    }


    /**
     * 获取达到次积分等级的用户人数
     */
    public static function arrive_level_user_num($level)
    {
        if (!is_int($level)) {
        	return false;
        }
        if ($level > 6) {
        	$level = 6;
        } elseif ($level <= 0) {
            $level = 1;
        }

        //根据等级计算达到此等级所需要的积分
        $target_score = Self::level_to_score($level);

        $filter = array();
        $filter['`score` >= '] = $target_score;

        return _model('user')->getTotal($filter);


    }



    /**
     * 获取达到此等级所需要的积分数
     */
    public static function level_to_score($level)
    {
        if ($level <= 0 || !is_int($level)) {
        	return false;
        }

        $tmp = 0;
        for ($i=$level; $i>0; $i--) {
            $tmp += $i;
        }

        $score = $tmp*1000;
        return $score;
    }


    /**
    * 获取登录用户的积分总数
    *
    */
    public static function get_user_score($user_id)
    {
        if (!$user_id) {
            return false;
        }

        $user_info = _uri('user', $user_id);
        $score = $user_info['score'];

        /* $filter = array();
        $filter['user_id'] = $user_id;

        $record_list = _model('score_record')->getList($filter);
        $score = 0;
        if ($record_list) {
            foreach ($record_list as $k => $v) {
                $score += $v['score'];
            }
        } */

        if ($score < 0) {
        	$score = 0;
        }

        return $score;

    }

    /**
     * 积分数格式化
     * @param number $num       总价格或箱子数
     * @param int $is_dealer 是否是经销商默认为0 是经销商 为1 不是则为0
     * @param int $dealer_level 经销商的等级,默认是1
     * @param int $is_same 进货价是否相同,1:相同 0:不相同,默认是0
     * @return unknown 如果不是经销商默认返回价格转换的积分数;
     *          如果是经销商则返回(根据经销商的等级)返回需要增加的积分数:
     *              如果等级为1, 返回一级经销商的积分数,
     *              如果等级为2, 返回二级经销商和已经经销商的积分数
     */

    public static function score_format($num, $is_dealer = 0, $dealer_level = 1, $is_same = 0)
    {
    if (!is_numeric($num)) {
        	return false;
        }

        // 判断是否是经销商
        if (!$is_dealer) {
            // 一块钱一个积分
        	return round($num);
        } else {
            if ($dealer_level == 1) {
                // 如果经销商为1级
            	return round($num)*10;
            } else {
                // 如果进货价相同
                if ($is_same) {
                	return array('dealer_one'=>round($num)*2, 'dealer_two'=>round($num)*8);
                } else {
                    return array('dealer_one'=>round($num)*0.5, 'dealer_two'=>round($num)*9.5);
                }

            }

        }
    }

    /**
     * 获取订单的积分
     * @param  [type] $order_id [description]
     * @return [type]           [description]
     */
    public static function get_order_score($user_id, $order_id)
    {
        if(!$order_id || !$user_id) {
            return false;
        }
        $filter = array(
                'user_id'  => $user_id,
                'order_id' => $order_id
            );

        $score_record_info = _uri('score_record', $filter);
        if(!$score_record_info) {
            return false;
        }
        return $score_record_info['score'];
    }
}
?>